package arrays;

/**
 * @Author: pengfei.hpf
 * @Date: 2020/1/23
 * 给定一个正整数 n，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的正方形矩阵。
 *
 * 示例:
 *
 * 输入: 3
 * 输出:
 * [
 *  [ 1, 2, 3 ],
 *  [ 8, 9, 4 ],
 *  [ 7, 6, 5 ]
 * ]
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/spiral-matrix-ii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class GenerateMatrix {

    public int[][] generateMatrix(int n) {
        if(n <= 0){
            return new int[0][0];
        }
        int[][] res = new int[n][n];
        int num = 1;
        int x = 0;
        while(x <= n/2){
            int row = x;
            int col = x;
            for(; col <= n - x - 1; col ++){
                res[row][col] = num;
                num ++;
            }
            row ++;
            col --;
            for(; row <= n - x - 1; row ++){
                res[row][col] = num;
                num ++;
            }
            col --;
            row --;
            for(; col >= x && row < n - x; col --){
                res[row][col] = num;
                num ++;
            }
            row --;
            col ++;
            for(; row > x && col >= x; row --){
                res[row][col] = num;
                num ++;
            }
            x ++;
        }
        return res;
    }

}
